package com.itheima.d12_api_integer;

import java.util.ArrayList;


/**
 * 为什么要有包装类？
 * 因为万物皆对象，但是八大基本数据类型不是对象：
 * int byte short long float double boolean char
 * Integer Byte Short Long Float Double Boolean Character
 * 包装类就是把基本类型的数据包装成对象。
 *
 * 包装类提供了哪些常用的功能？
  1、把基本类型的数据转换成字符串
 public String toString()   public static String toString(double d)

  2、把字符串类型的数值转换成真实的基本类型。
 public static int parseInt(String s)   public static Integer valueOf(String s)
 *
 */
public class Test {
    public static void main(String[] args) {
        // 目标：掌握包装类的使用。
        // Integer a1 = new Integer(12);   过时了
        //public static Integer valueOf(int i) 用Integer类的静态方法valueOf(数据)
        Integer a2 = Integer.valueOf(12);
        System.out.println(a2);   //默认调用了object的tostring方法，所以不是输出地址值
        System.out.println(a2.toString());

        // 简化上面的代码，可以自动装箱：可以自动把基本类型的数据转换成引用类型(对象)。
        Integer a3 = 12;

        // 自动拆箱：可以自动把引用类型的对象转换成对应的基本数据类型。
        int a4 = a3;
        System.out.println("自动拆箱： "+a4);

        // 泛型和集合不支持基本数据类型，只能支持引用数据类型。
        // ArrayList<int> list = new ArrayList<>();  报错


        ArrayList<Integer> list = new ArrayList<>();
        //添加的元素是基本类型，实际上会自动装箱为Integer类型
        list.add(12); // 自动装箱 基本类型的数据转换成包装类型(对象)
        list.add(13); // 自动装箱

        int rs = list.get(1); // 自动拆箱

        System.out.println("--------------------------------------------------");

        // 1、把基本类型的数据转换成字符串 public String toString()   public static String toString(double d)
        Integer a = 23;
        String rs1 = Integer.toString(a); // "23"
        String rb = Integer.toString(23);
        System.out.println(rb);
        System.out.println("rs1+1: "+rs1 + 1); // 231

        String rs2 =  a.toString(); // "23"
        System.out.println("rs2 + 1: "+rs2 + 1);  //231

        String rs3 = a + "";  //也可以转换成字符串
        System.out.println("rs3 + 1: "+rs3 + 1);

        //2.整数转换为字符串，以下几种方式都可以（挑中你喜欢的记一下）
        Integer a1 = 23;
        String s1 = Integer.toString(a1);
        String s2 = a1.toString();
        String s3 = a1+"";
        String s4 = String.valueOf(a1);

        // 2、把字符串类型的数值转换成真实的基本类型。  public static int parseInt(String s)   public static Integer valueOf(String s)
        String ageStr = "29";   //要的是字符串类型的数值，如果瞎几把填“29a”那就会报错:NumberFormatException
         int ageI1 = Integer.parseInt(ageStr); // 29
        System.out.println("ageI1+1: "+ageI1+1); //ageI1+1: 291，由于字符串拼接，默认把后面的int类型也改为字符串了
        System.out.println(ageI1+1);

        int ageI = Integer.valueOf(ageStr); // 29
        System.out.println("ageI + 1: "+ageI + 1); // ageI + 1: 291
        System.out.println(+ageI + 1); // 30

        String scoreStr = "99.5";
         double score1 = Double.parseDouble(scoreStr); // 99.5
        double score = Double.valueOf(scoreStr); // 99.5
        System.out.println(score + 0.5);

    }
}
